Integrated circuits often contain memory controllers for interfacing with memory. In a typical system, an integrated circuit can be used to communicate with system memory. In particular, the integrated circuit includes a memory controller that serves as an interface between the integrated circuit and the system memory. As an example, a system with double data rate four synchronous dynamic random access memory (DDR4 SDRAM) can have a memory controller for interfacing with the DDR4 SDRAM. The integrated circuit also includes processing circuits that are configured to access system memory by sending memory access requests to the memory controller (i.e., the memory controller includes one or more ports each of which receives memory access requests from a respective processing module within the integrated circuit).
A memory controller includes physical interface circuitry for sending and receiving signals from the system memory via conductive paths. The physical interface circuitry is used to receive data signals from system memory. The data signals have corresponding voltages that are used to determine whether the data signals correspond to logic one values or logic zero values. For example, the physical interface circuitry often includes comparators that compare the data signals to a reference voltage.
It may be difficult to accurately determine whether the data signals correspond to logic one or logic zero values. For example, the voltage levels of data signals that are conveyed over the conductive paths can vary depending on the source resistance of a driver circuit in the system memory and the termination resistance of a receiver circuit in the memory controller. In this scenario, comparators that are used to determine the logic values of the data signals can potentially produce incorrect results.